package com.itheima.health.service.impl;

import com.alibaba.dubbo.config.annotation.Service;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.itheima.health.dao.UsertextDao;
import com.itheima.health.entity.PageResult;
import com.itheima.health.entity.QueryPageBean;
import com.itheima.health.pojo.User;
import com.itheima.health.service.UsertextService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @Author likepei
 * @Date 2020/2/5 14:23
 * @Version v1.0
 * @Description 用户接口的实现类
 */
@Service
@Slf4j
@Transactional
public class UsertextServiceImpl implements UsertextService {

    @Autowired
    private UsertextDao usertextDao;

    //分页查询用户
    @Override
    public PageResult pageQuery(QueryPageBean queryPageBean) {
        //设置分页插件初始参数
        PageHelper.startPage(queryPageBean.getCurrentPage(), queryPageBean.getPageSize());
        //通过Dao获取Page对象
        Page<User> page = usertextDao.selectByCondition(queryPageBean.getQueryString());
        //通过Page对象，构建PageResult
        PageResult pageResult = new PageResult(page.getTotal(), page.getResult());
        System.out.println(pageResult);

        return pageResult;
    }

    //删除用户
    @Override
    public void deleteById(Integer id) {
        //通过用户ID,

        usertextDao.delectroleByuserId(id);
        usertextDao.deleteByuserId(id);
    }

    //添加用户
    @Override
    public void add(User user, Integer[] id) {
        usertextDao.add(user);

        //保存新增检查组 与 勾选的检查项 , 保存到中间表里 t_checkgroup_checkitem
        //遍历检查项Id的数组, 得到每一个检查项id
        for (Integer integer : id) {
                //创建Map集合 用于存储本次sql语句的 新增检查组id 与 当前的检查项Id
                Map<String, Integer> map = new HashMap<>();
                map.put("user_id", user.getId());
                map.put("role_id", integer);
                //把新增检查组id 与 当前的检查项Id 保存到中间表
                usertextDao.adduserandrole(map);
        }
    }



    @Override
    public void edit(User user, Integer[] id) {
//更新检查组信息
        usertextDao.edit(user);
        //删除检查组 旧的依赖关系( 检查组与勾选的检查项的关系 [从中间表删除数据] )
        usertextDao.delectroleByuserId(user.getId());
        //重新 建立新的检查组的依赖关系( 检查组与勾选的检查项的关系[从中间表添加数据] )
        for (Integer integer : id) {
            //建立Map集合, 用于保存每一次sql执行时 用到的 检查组ID与 检查项ID
            Map<String, Integer> map = new HashMap<>();
            map.put("user_id", user.getId());
            map.put("role_id", integer);

            usertextDao.adduserandrole(map);
        }
    }


    @Override
    public User findById(Integer id) {
        User user = usertextDao.findById(id);
        return user;
    }


    @Override
    public List<Integer> findroleIdsByUserId(Integer id) {
        List<Integer> list = usertextDao.findroleIdsByUserId(id);
        System.out.println(">>>>>>>>>>>>>>>"+list);
        return list;
    }
}